#pragma once

// Dependencies
#include "../Core/Quaternion.h"
#include "../Core/Point3.h"
namespace Core {
	template<class T> class Vector3_t;
}

namespace View {
	class Camera {
	public: // Methods
		void setup() const;
		void update();

	public: // Accessors
		const Core::Vector3_t<float> up() const;
		const Core::Vector3_t<float> forward() const;
		const Core::Vector3_t<float> right() const;

	private: // Helper methods
		const Core::Vector3_t<float> vec(int idx) const;

	public: // Members
		Core::Quaternion4f	mOrientation;
		Core::Point3f		mPosition;

	private: // Members
		float mViewMatrix[4][4];
	};
}